package com.tess.tboot.base;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.io.Serializable;
import java.util.List;
import java.util.Map;


/**
 * @author Exrickx
 */
//JDK8函数式接口注解 仅能包含一个抽象方法
public interface TbootBaseService<E> {

    TbootBaseMapper<E> getMapper();

    /**
     * 根据ID获取
     *
     * @param id
     * @return
     */
    E get(Serializable id);

    /**
     * 获取所有列表
     *
     * @return
     */
    public List<E> getAll();

    /**
     * 获取总数
     *
     * @return
     */
    public int getTotalCount(E entity);

    /**
     * 保存
     *
     * @param entity
     * @return
     */
    public E save(E entity);

    /**
     * 修改
     *
     * @param entity
     * @return
     */
    public int update(E entity);

    /**
     * 批量保存与修改
     *
     * @param entities
     * @return
     */
    public int saveAll(List<E> entities);

    /**
     * 删除
     *
     * @param entity
     */
    public void deleteEntity(E entity);

    /**
     * 根据Id删除
     *
     * @param id
     */
    public void delete(Serializable id);

    /**
     * 批量删除
     *
     * @param entities
     */
    public void delete(Iterable<E> entities);

    /**
     * 清空缓存，提交持久化
     */
    public default void flush() {


    }

    /**
     * 获取查询条件的结果数
     *
     * @param params
     * @return
     */
    public long count(Map<String,Object> params);

    /**
     * 根据条件查询获取
     *
     * @param params
     * @return
     */
    public List<E> findAll(Map<String,Object> params);

    /**
     * 根据条件查询获取
     *
     * @param params
     * @return
     */
    public Page<E> findWithPage(Map<String, Object> params, Pageable pageable);
}
